package com.ld.tool.service.tool;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;

import com.ld.shieldsb.common.core.io.IOUtils;
import com.ld.shieldsb.common.core.io.ResourceUtils;
import com.ld.shieldsb.common.core.util.StringUtils;
import com.ld.tool.model.tool.OnlineToolModel;

import lombok.extern.slf4j.Slf4j;

/**
 * 
 * 读取Readme.md的服务类，@Service注解用于自动注入
 * 
 * @author <a href="mailto:donggongai@126.com" target="_blank">吕凯</a>
 * @date 2019年10月24日 上午8:46:45
 *
 */
@Service
@Slf4j
public class ReadmeMDService {

    /**
     * 获取docs目录下的Readme.md文件
     * 
     * @Title getReadmeMDs
     * @author 吕凯
     * @date 2019年10月24日 上午8:46:45
     * @return List<String>
     */
    public List<OnlineToolModel> getReadmeMDs() {
//      File menuDir = new File(PathUtil.getClassRootPath(), "/static/images/menu/"); // 打成jar包时获取不到，需要另外处理
//      List<String> menuFiles = Arrays.asList(menuDir.list());
        List<OnlineToolModel> menuFiles = new ArrayList<>();
        Resource[] resources = ResourceUtils.getResources("classpath*:**/docs/**/*.md"); // 查询docs目录下的md文件
        for (Resource resource : resources) {
            try {
                OnlineToolModel model = new OnlineToolModel();
                String path = resource.getURL().getPath();
                String title = "";
                try (InputStream in = resource.getInputStream()) {
                    List<String> content = IOUtils.readLines(in, "UTF-8");
                    // 第一行以 # 开头的内容作为标题
                    title = content.stream().filter(cont -> cont.startsWith("#")).findFirst().get();
                    title = StringUtils.substringAfterLast(title, "#").trim();
                }
                path = "/docs/" + StringUtils.substringAfter(path, "/docs/"); // 获取相对路径
                model.setUrl(path);
                model.setTitle(title);
                menuFiles.add(model);
            } catch (IOException e) {
                log.error("", e);
            }
        }
        return menuFiles;
    }
}
